package oauth

import (
	"fmt"
	"net/url"
)

// Config 插件配置结构
type Config struct {
	// OAuth 服务器配置
	AuthorizeURL string `json:"authorize_url,omitempty"` // 授权地址
	TokenURL     string `json:"token_url,omitempty"`     // 获取token地址
	UserInfoURL  string `json:"userinfo_url,omitempty"`  // 用户信息地址
	ClientID     string `json:"client_id,omitempty"`     // 客户端ID
	ClientSecret string `json:"client_secret,omitempty"` // 客户端密钥
	CallbackPath string `json:"callback_path,omitempty"` // 回调路径

	// JWT 配置
	JWTSecret       string `json:"jwt_secret,omitempty"`        // JWT密钥
	TokenCookieName string `json:"token_cookie_name,omitempty"` // Cookie名称

	// 其他配置
	Scopes       []string `json:"scopes,omitempty"`        // OAuth作用域
	ExcludePaths []string `json:"exclude_paths,omitempty"` // 排除的路径
}

// validateConfig 验证配置
func (c *Config) validateConfig() error {
	if c.AuthorizeURL == "" || c.TokenURL == "" || c.UserInfoURL == "" {
		return fmt.Errorf("authorize_url, token_url and userinfo_url are required")
	}

	// 验证URL格式
	urls := []string{c.AuthorizeURL, c.TokenURL, c.UserInfoURL}
	for _, u := range urls {
		if _, err := url.Parse(u); err != nil {
			return fmt.Errorf("invalid URL %s: %v", u, err)
		}
	}

	if c.ClientID == "" || c.ClientSecret == "" {
		return fmt.Errorf("client_id and client_secret are required")
	}

	if c.JWTSecret == "" {
		return fmt.Errorf("jwt_secret is required")
	}

	return nil
}
